์ž‘์„ฑ: 2026-04-23 00:58:32์ˆ˜์ •: 2026-04-23 00:58:32

PostgreSQL 16์—์„œ 17๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ ๊ฐ€์ด๋“œ: ์ฃผ์š” ๋ณ€๊ฒฝ์  ๋ฐ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜

PostgreSQL 17์€ ์„ฑ๋Šฅ ์ตœ์ ํ™”, ๊ด€๋ฆฌ ํŽธ์˜์„ฑ ํ–ฅ์ƒ, ๊ทธ๋ฆฌ๊ณ  SQL ํ‘œ์ค€ ์ง€์› ๊ฐ•ํ™”์— ์ค‘์ ์„ ๋‘” ๋Œ€๊ทœ๋ชจ ์—…๋ฐ์ดํŠธ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ ์ง„๋ณด๋œ ์ง„๊ณต(VACUUM) ํ”„๋กœ์„ธ์Šค์™€ ์ฆ๋ถ„ ๋ฐฑ์—…(Incremental Backup) ๊ธฐ๋Šฅ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์šด์˜ ํšจ์œจ์„ฑ์„ ํš๊ธฐ์ ์œผ๋กœ ๋†’์—ฌ์ค๋‹ˆ๋‹ค.

1. PostgreSQL 17 ์ฃผ์š” ๋ณ€๊ฒฝ์ 

1.1 ์„ฑ๋Šฅ ๋ฐ ์šด์˜ ์ตœ์ ํ™”

  • VACUUM ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ํ˜์‹ : VACUUM ์ž‘์—… ์‹œ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๋ฐฉ์‹์ด ์™„์ „ํžˆ ์žฌ์„ค๊ณ„๋˜์–ด, ๋ฉ”๋ชจ๋ฆฌ ์†Œ๋น„๋Ÿ‰์ด ์ด์ „ ๋ฒ„์ „ ๋Œ€๋น„ ์ตœ๋Œ€ 20๋ฐฐ ๊ฐ์†Œํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๊ณ ๋ถ€ํ•˜ ์‹œ์Šคํ…œ์—์„œ ์ž์› ๊ฒฝํ•ฉ์„ ์ค„์—ฌ์ค๋‹ˆ๋‹ค.
  • ์ŠคํŠธ๋ฆฌ๋ฐ I/O ๋„์ž…: ์ˆœ์ฐจ ์Šค์บ”(Sequential Scan) ๋ฐ ANALYZE ์ž‘์—… ์†๋„๋ฅผ ๋†’์—ฌ์ฃผ๋Š” ์ƒˆ๋กœ์šด ์ŠคํŠธ๋ฆฌ๋ฐ I/O ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ฆ๋ถ„ ๋ฐฑ์—…(Incremental Backup): pg_basebackup์—์„œ ์ฆ๋ถ„ ๋ฐฑ์—…์„ ๊ธฐ๋ณธ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ pg_combinebackup ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฆ๋ถ„ ๋ฐฑ์—…๋ณธ์„ ์ „์ฒด ๋ฐฑ์—…๋ณธ์œผ๋กœ ๋ณต์›ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์–ด ๋ฐฑ์—… ํšจ์œจ์„ฑ์ด ๊ทน๋Œ€ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

1.2 SQL ๋ฐ ๊ฐœ๋ฐœ์ž ํŽธ์˜ ๊ธฐ๋Šฅ

  • SQL/JSON ํ‘œ์ค€ ์ง€์›:
    • JSON_TABLE() ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด JSON ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๊ณ„ํ˜• ํ…Œ์ด๋ธ” ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ SQL ์กฐ์ธ์ด๋‚˜ ํ•„ํ„ฐ๋ง์— ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • JSON_EXISTS(), JSON_QUERY(), JSON_VALUE() ๋“ฑ ์ƒˆ๋กœ์šด ์ฟผ๋ฆฌ ํ•จ์ˆ˜๋“ค์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • MERGE ๊ตฌ๋ฌธ ๊ฐ•ํ™”: MERGE ๋ช…๋ น์—์„œ RETURNING ์ ˆ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์œผ๋ฉฐ, ์—…๋ฐ์ดํŠธ ๊ฐ€๋Šฅํ•œ ๋ทฐ(Updatable Views)๋ฅผ ๋Œ€์ƒ์œผ๋กœ๋„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • COPY ์˜ค๋ฅ˜ ๋ฌด์‹œ: COPY ๋ช…๋ น์–ด์— ON_ERROR ignore ์˜ต์…˜์ด ์ถ”๊ฐ€๋˜์–ด, ์ผ๋ถ€ ํ–‰์— ์—๋Ÿฌ๊ฐ€ ์žˆ๋”๋ผ๋„ ์ž‘์—…์„ ์ค‘๋‹จํ•˜์ง€ ์•Š๊ณ  ๊ณ„์† ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1.3 ๋…ผ๋ฆฌ์  ๋ณต์ œ(Logical Replication)

  • pg_createsubscriber: ๋ฌผ๋ฆฌ์  ๋Œ€๊ธฐ ์„œ๋ฒ„(Physical Standby)๋ฅผ ๋…ผ๋ฆฌ์  ๋ณต์ œ๋ณธ(Logical Replica)์œผ๋กœ ์†์‰ฝ๊ฒŒ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒˆ๋กœ์šด ์œ ํ‹ธ๋ฆฌํ‹ฐ๊ฐ€ ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์žฅ์•  ์กฐ์น˜(Failover) ์ง€์›: ๊ธฐ๋ณธ ์„œ๋ฒ„ ์žฅ์•  ์‹œ์—๋„ ๊ตฌ๋…์ž(Subscriber)๊ฐ€ ๋™๊ธฐํ™” ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œ์–ด ๊ธฐ๋Šฅ์ด ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

2. ์—…๊ทธ๋ ˆ์ด๋“œ ์ „ ์ฃผ์˜์‚ฌํ•ญ

  • ๋…ผ๋ฆฌ์  ๋ณต์ œ ์Šฌ๋กฏ: PostgreSQL 17๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•  ๋•Œ๋Š” ๊ธฐ์กด์˜ ๋…ผ๋ฆฌ์  ๋ณต์ œ ์Šฌ๋กฏ์ด ๋ณด์กด๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(17์—์„œ 18๋กœ ๊ฐˆ ๋•Œ๋Š” ๊ฐ€๋Šฅ). ๋”ฐ๋ผ์„œ ์—…๊ทธ๋ ˆ์ด๋“œ ์ „ ์Šฌ๋กฏ์„ ์‚ญ์ œํ•˜๊ณ  ์—…๊ทธ๋ ˆ์ด๋“œ ํ›„ ๋‹ค์‹œ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • Search Path ๋ณด์•ˆ: ๋ณด์•ˆ ๊ฐ•ํ™”๋ฅผ ์œ„ํ•ด ๊ด€๋ฆฌ ์ž‘์—… ์ค‘ search_path ๊ทœ์น™์ด ๋” ์—„๊ฒฉํ•˜๊ฒŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ธ๋ฑ์Šค ์‹์ด๋‚˜ ๊ตฌ์ฒดํ™”๋œ ๋ทฐ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜๋Š” ์Šคํ‚ค๋งˆ ๋ช…์นญ์„ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค.
  • ์ง€์› ์ค‘๋‹จ: AIX OS ์ง€์›์ด ๊ณต์‹์ ์œผ๋กœ ์ค‘๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

3. ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ ˆ์ฐจ (pg_upgrade)

๊ฐ€์žฅ ๊ถŒ์žฅ๋˜๋Š” ๋ฐฉ์‹์€ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ์ง์ ‘ ๋ณต์‚ฌํ•˜์ง€ ์•Š๊ณ  ๋งํฌ๋งŒ ์ƒ์„ฑํ•˜๋Š” --link ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

# 1. ์ƒˆ ๋ฒ„์ „(17)์˜ ๋ฐ”์ด๋„ˆ๋ฆฌ ์„ค์น˜ ๋ฐ ๋ฐ์ดํ„ฐ ๋””๋ ‰ํ† ๋ฆฌ ์ดˆ๊ธฐํ™”(initdb)
# 2. ์—…๊ทธ๋ ˆ์ด๋“œ ํ˜ธํ™˜์„ฑ ์ฒดํฌ
pg_upgrade \
  --old-datadir /var/lib/postgresql/16/main \
  --new-datadir /var/lib/postgresql/17/main \
  --old-bindir /usr/lib/postgresql/16/bin \
  --new-bindir /usr/lib/postgresql/17/bin \
  --check
 
# 3. ์‹ค์ œ ์—…๊ทธ๋ ˆ์ด๋“œ ์ˆ˜ํ–‰ (ํ•˜๋“œ๋งํฌ ๋ชจ๋“œ ๊ถŒ์žฅ)
pg_upgrade \
  --old-datadir /var/lib/postgresql/16/main \
  --new-datadir /var/lib/postgresql/17/main \
  --old-bindir /usr/lib/postgresql/16/bin \
  --new-bindir /usr/lib/postgresql/17/bin \
  --link

4. ์—…๊ทธ๋ ˆ์ด๋“œ ํ›„ ๋งˆ๋ฌด๋ฆฌ ์ž‘์—…

  • ํ†ต๊ณ„ ์ •๋ณด ๊ฐฑ์‹ : ์—…๊ทธ๋ ˆ์ด๋“œ ์งํ›„์—๋Š” ์‹คํ–‰ ๊ณ„ํš ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ./analyze_new_cluster.sh๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ํ†ต๊ณ„ ์ •๋ณด๋ฅผ ๋‹ค์‹œ ์ˆ˜์ง‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ต์Šคํ…์…˜ ์—…๋ฐ์ดํŠธ: PostGIS ๋“ฑ ์‚ฌ์šฉ ์ค‘์ธ ์™ธ๋ถ€ ํ™•์žฅ์ด 17 ๋ฒ„์ „์— ๋งž๊ฒŒ ์—…๋ฐ์ดํŠธ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์žฌ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์ธ๋ฑ์Šค ์žฌ๊ตฌ์„ฑ: ์ •๋ ฌ(Collation) ๊ด€๋ จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์—ˆ๋‹ค๋ฉด REINDEX๋ฅผ ํ†ตํ•ด ์ธ๋ฑ์Šค ๋ฌด๊ฒฐ์„ฑ์„ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

PostgreSQL 17์€ ํŠนํžˆ ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ํ™˜๊ฒฝ์—์„œ VACUUM ์„ฑ๋Šฅ ํ–ฅ์ƒ๊ณผ ์ฆ๋ถ„ ๋ฐฑ์—…๋งŒ์œผ๋กœ๋„ ์ถฉ๋ถ„ํžˆ ์—…๊ทธ๋ ˆ์ด๋“œํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š” ๋ฒ„์ „์ž…๋‹ˆ๋‹ค.